'''
Created on Jun 12, 2012

@authors: Jose Ignacio Alamos , Nicolas Barnafi
'''
from psrgen import generar_inscritos as gs

#Datos estaticos
capacidad_chicas=30
capacidad_medianas=45
capacidad_grandes=70
chicas=12
medianas=17
grandes=7

# Posee semestres y un nombre
class Carrera:
    def __init__(self,nombre):
        self.nombre = nombre
        self.semestres = []
    #Pasarle un objeto semestre
    def agregarSemestre(self,sem):
        self.semestres.append(sem)
    
# Poseen un numero y sus ramos
class Semestre:
    def __init__(self,i):
        self.index = i
        self.ramos = []
    def agregarRamos(self,r):
        self.ramos.append(r)
   
# Uso por definir, contiene la concurrencia del ramo y la carrera a la que pertenece    
class Ramo:
    def __init__(self,nombre, inscritos, tasa):
        self.nombre = nombre
        self.inscritos = inscritos
        self.tasa = tasa
        self.CS=() #Carrera-semestre

class Patron:
    def __init__(self, lista):
        self.chicas = lista[0]
        self.medianas = lista[1]
        self.grandes = lista[2]
    def capacidad(self):
        return self.chicas+self.medianas+self.grandes

	#def convert_pat(self, p) #Recibe un archivo para convertir en patron
 
#Tiene salas que se puede ir ocupando
class Modulo:
    def __init__(self):
        self.chicas_ocupadas=0
        self.medianas_ocupadas=0
        self.grandes_ocupadas=0	
    #Trata de agregar un patron, retorna si cabe o no
    def agregar_patron(self, p):
        c=p.chicas
        m=p.medianas
        g=p.grandes
        if self.chicas_ocupadas+c > 12 or self.medianas_ocupadas+m > 17 or self.grandes_ocupadas+g >7 :
            return False
        else:
            self.chicas_ocupadas += c
            self.medianas_ocupadas += m
            self.grandes_ocupadas += g
            self.patrones.append(p)
            return True
    def quitar_patron(self,p):
        self.chicas_ocupadas-=p.chicas
        self.medianas_ocupadas-=p.medianas
        self.grandes_ocupadas-=p.grandes

#class Module:
#    def __init__(self, clusters):
#        self.clusters = clusters
#    pass

class Pattern:
    def __init__(self, capacity, n_r):
        self.capacity = capacity
        self.num_room = []
        for n in n_r:
            self.num_room.append(n)
    pass	
		
            	

# Clase que almacena un grupo de cursos para luego meter al modelo 
class Cluster:
    def __init__(self, cluster_id):
        self.ramos = []
        self.patrones = []
        self.modulos = []
        self.mod_pat=[]
        self.cluster_id = 0
        self.ramos_ocupados=0
        self.cant_ramos=0
    def agregarRamo(self, r):
        self.ramos.append(r)

    def totalInscritos(self):
        s=0
        for r in self.ramos:
            s = s + r.inscritos
        return s
    def __str__(self):
        texto=""
        for r in self.ramos:
            if r.nombre!="":
                texto +=  "%s en %s, con %s inscritos \n" % (r.nombre,r.CS, r.inscritos) 
        return texto
    
    #Agregar o quitar modulos y patrones.
    def asignar_patron(self, p):
        self.patrones.append(p)
    def quitar_patron(self,p):
        self.patrones.remove(p)
    def asignar_modulo(m):
        self.modulos.append(m)
    def quitar_modulo(m):
        self.modulos.remove(m)

''' Clase Cluster de obj.py, revisar
class Cluster:
    def __init__(self, n_pattern, c_num, demand):
        n_r = self._convert_pattern(n_pattern)
        capacity = n_r[0]*30 + n_r[1]*45 + n_r[2]*70
        self.pattern = Pattern(capacity, n_r)
        self.c_num = c_num
        self.demand = demand
    pass
    def _convert_pattern(self, num):
        # Tuple: (small, medium, large)
        small = (num-1)/(18*8)
        reminder = (num-1)-small*(18*8)
        medium = reminder/8
        large = reminder-(medium*8)
        return (small, medium, large)

    def assign_pattern(n_pattern):
        n_r = self._convert_pattern(n_pattern)
        capacity = n_r[0]*30 + n_r[1]*45 + n_r[2]*70
        self.pattern = Pattern(capacity, n_r) '''
